package org.noear.solon.mybatis.flex.generator;

import java.sql.Timestamp;
import java.util.Date;

import com.mybatisflex.codegen.Generator;
import com.mybatisflex.codegen.config.GlobalConfig;
import com.mybatisflex.codegen.dialect.JdbcTypeMapping;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import cn.hg.solon.youcan.common.vo.BaseVo;

/**
 * @author 胡高
 */
public class JobTableGeneratior {

    public static void main(String[] args) {

        // 配置数据源
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/youcan-solon?characterEncoding=utf-8");
        dataSource.setUser("root");
        dataSource.setPassword("123456");

        // 创建配置内容
        GlobalConfig globalConfig = new GlobalConfig();

        // globalConfig.setTableDefGenerateEnable(true);
        //
        // globalConfig.setTableDefClassPrefix("");
        // globalConfig.setTableDefClassSuffix("");

        // 设置只生成哪些表
        globalConfig.setGenerateTable("sys_job", "sys_job_log");


        // 设置 entity 的包名
        globalConfig.setEntityPackage("cn.hg.solon.youcan.job.entity");
        globalConfig.setEntitySupperClass(BaseVo.class);

        // 设置表前缀
        //globalConfig.setTablePrefix("sys_");

        // 设置 entity 是否使用 Lombok
        // globalConfig.setEntityWithLombok(true);

        // 是否生成 mapper 类，默认为 false
        globalConfig.setMapperGenerateEnable(true);
        // 是否覆盖已经存在的 mapper
        globalConfig.setMapperOverwriteEnable(false);

        // 设置 mapper 类的包名
        globalConfig.setMapperPackage("cn.hg.solon.youcan.job.mapper");

        // 可以单独配置某个列
        //        ColumnConfig columnConfig = new ColumnConfig();
        //        columnConfig.setColumnName("tenant_id");
        //        columnConfig.setLarge(true);
        //        columnConfig.setVersion(true);
        //        globalConfig.addColumnConfig("account", columnConfig);

        // 设置逻辑删除字段
        globalConfig.setLogicDeleteColumn("del");

        // 设置排除的表
        // globalConfig.addUnGenerateTable("sys_role_dept_mapping", "sys_role_permission_mapping",
        // "sys_user_position_mapping", "sys_user_role_mapping");

        // 通过 datasource 和 globalConfig 创建代码生成器
        Generator generator = new Generator(dataSource, globalConfig);

        // Timestamp类型日期用Date代替
        JdbcTypeMapping.registerMapping(Timestamp.class, Date.class);

        // 生成代码
        generator.generate();
    }

}
